package top.jojoace.JPA.model_DDL.BaseEntity;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter;
import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;

import javax.persistence.Entity;
import javax.persistence.MappedSuperclass;
import java.util.Date;


/**
 * 用于抽取重复字段
 */
@Getter
@Setter
/**
 * @MappedSuperclass  标记注解了@Entity的父类
 * 使用JAP能够映射该类的字段。
 */
@MappedSuperclass
public abstract class BaseEntity {


    /**
     * 一般都是使用@DateTimeFormat把 传给后台的时间字符串转成Date
     * 使用@JsonFormat 把后台传出的Date转成时间字符串
     *
     * @DateTimeFormat 只会在类似@RequestParam的请求参数上生效
     * <p>（url拼接的参数才生效，如果是放到RequestBody中的form-data也是无效的）</p>
     *
     * 在@RequestBody中则可以使用@JsonFormat把传给后台的时间字符串转成Date，
     * @JsonFormat 其实既可以把传给后台的时间字符串转成Date也可以把后台传出的Date转成时间字符串 。
     */
    @JsonProperty("createTime")
    private Date createTime;

    /**
     * @JsonProperty("createTime")
     * 对于驼峰字段：只能反序列化对应的 update_time
     * 若要反序列化 updateTime 只能添加 @JsonProperty 指定对应的Key
     */
    @JsonProperty("updateTime")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;

    @JsonProperty("deleteTime")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date deleteTime;

    /**
     *     @JsonIgnore 在序列化时不序列化该字段
     */
    @JsonIgnore
    private int statecode;
}
